#============================================================
#    Math Util
#============================================================
# - datetime: 2022-12-21 22:53:39
#============================================================
## 数学工具
class_name MathUtil


static func distance_to_by_node(a: Node2D, b: Node2D) -> float:
	return a.global_position.distance_to(b.global_position)

static func direction_to_by_node(a: Node2D, b: Node2D) -> Vector2:
	return a.global_position.direction_to(b.global_position)

static func angle_to_by_node(a: Node2D, b: Node2D) -> float:
	return a.global_position.angle_to(b.global_position)

static func angle_to_point_by_node(a: Node2D, b: Node2D) -> float:
	return a.global_position.angle_to_point(b.global_position)


##  返回对应概率的值
##[br]
##[br][code]value_list[/code]  值列表
##[br][code]probability_list[/code]  概率列表
static func random_probability(
	value_list : Array,
	probability_list: Array
):
	
	# 两个列表的值的个数应相同
	if value_list.size() != probability_list.size():
		print("数量不一致")
		return null
	
	# 累加概率值，计算概率总和
	# 每次累加存到列表中作为概率区间
	var sum = 0.0
	var p_list = []	# 概率列表
	for i in probability_list:
		sum += i
		p_list.push_back(sum)
	
	# 产生一个 [0, 概率总和) 之间的随机值
	# 概率区间越大的值，则随机到的概率越大
	# 则就实现了每个值的随机值
	var r = randf() * sum
	var idx = 0
	for p in p_list:
		# 当前概率超过或等于随机的概率，则返回
		if p >= r:
			return value_list[idx]
		idx += 1
	
	return null
